package fun.codedesign.jdk.thread;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

public class TwoThreadPrintUserId {

    public static void main(String[] args) {
        // 问题：使用多线程而非for循环遍历user大集合，打印userId, 避免超时问题, user是一个大对象
        // 大体思路：使用原子类初始化users等同数量大小，用下标定位到对象打印出来（ArrayList为数组结构，下标定位较快），根据实际情况开启一定数量的线程。
        List<User> users = new ArrayList<>();
        users.add(new User());
        // CountDownLatch latch = new CountDownLatch(users.size());
        AtomicInteger nums = new AtomicInteger(users.size());

        Runnable run = () -> {
            while (true) {
                int index = nums.decrementAndGet();
                if (index < 0) {

                }
                System.out.println(users.get(index).getUserId());
            }
        };
        new Thread(run).start();
        new Thread(run).start();
    }

    static class User {
        private String userId = "zhangsan";

        public String getUserId() {
            return userId;
        }
    }
}
